# -*- coding: utf-8 -*-

 ###############################################
 ##                                             ##
 ##   Módulo holder                              ##
 ##                                              ##
 ##                                              ##
 ##   de la línea Básicos                        ##
 ##   de Críptidos Digitales                     ##
 ##   GPL (c)2008                                ##
  ##                                             ##
    ###############################################

"""
Contiene una clase que define la ventana de diálogo que captura los datos de
la empresa.
"""

# print (0), "  propio                begin"

import sys
from PyQt4 import QtCore, QtGui

import propio_ui
import errors

# from cdWidgets.cdRfcEdit import CDRfcEdit

import man

# print (0), "  propio                  definitions"


class Forma(QtGui.QDialog):

    @property
    def app(self):
        return self.__app

    @property
    def modo(self):
        return self.__modo

    def __init__(self, *args, **kwds): # print 'propio.Forma.__init__()'
        if kwds.has_key('app'):
            self.__app = kwds.pop('app')
        else:
            self.__app = {}

        if args:
            title = args[0]
        else:
            title = u"Datos de la Empresa"

        QtGui.QDialog.__init__(self)

        self.ui = propio_ui.Ui_Dialog()
        self.ui.setupUi(self)

        self.setWindowTitle(self.app.info['title'])
        self.setWindowIcon(QtGui.QIcon("imagenes/icon.ico"))

        # self.ui.titulo.setText(self.app.info['title'])
        # self.ui.titulo.setText("")

        self.ui.label.setText(title)

        ## Nombre comercial
        self.ui.edNombreComercial.setEmptyAllowed(False)
        self.connect(self.ui.edNombreComercial, QtCore.SIGNAL('textEdited(QString)'), self.actualizaStatus)

        ## Razón social
        self.ui.edRazonSocial.setEmptyAllowed(False)
        self.connect(self.ui.edRazonSocial, QtCore.SIGNAL('textEdited(QString)'), self.actualizaStatus)

        ## Apellidos
        self.ui.edNombre2.setEmptyAllowed(True)
        self.connect(self.ui.edNombre2, QtCore.SIGNAL('textEdited(QString)'), self.actualizaStatus)

        ## RFC
        self.connect(self.ui.edRFC, QtCore.SIGNAL('textEdited(QString)'), self.actualizaStatus)

        ## Calle
        self.ui.edCalle.setEmptyAllowed(False)
        self.connect(self.ui.edCalle, QtCore.SIGNAL('textEdited(QString)'), self.actualizaStatus)

        ## Colonia
        self.ui.edColonia.setEmptyAllowed(False)
        self.connect(self.ui.edColonia, QtCore.SIGNAL('textEdited(QString)'), self.actualizaStatus)

        ## Código postal
        self.ui.edCodigoPostal.setAllowedLengths(5, 5)
        self.ui.edCodigoPostal.setOnlyNumbers(True)
        self.ui.edCodigoPostal.setEmptyAllowed(False)
        self.ui.edCodigoPostal.setPrefijoMensaje(u"Codigo postal")
        self.connect(self.ui.edCodigoPostal, QtCore.SIGNAL('textEdited(QString)'), self.actualizaStatus)

        ## Lugar
        self.connect(self.ui.cbLugar, QtCore.SIGNAL('currentIndexChanged(int)'), self.lugarChanged)
        self.connect(self.ui.cbLugar, QtCore.SIGNAL('lostFocus()'), self.lugarLostFocus)
        self.cargaLugares()

        # completer = QtGui.QCompleter([], self.ui.edLugar)
        # completer.setCaseSensitivity(QtCore.Qt.CaseInsensitive)
        # self.ui.edLugar.setCompleter(completer)
        # self.ui.edLugar.setEmptyAllowed(False)
        # self.ui.edLugar.setAllowedLengths(3, 25)
        # self.connect(self.ui.edLugar, QtCore.SIGNAL('downArrowPressed()'), self.muestraLugares)
        # self.connect(self.ui.edLugar, QtCore.SIGNAL('textEdited(QString)'), self.actualizaStatus)
        # self.connect(self.ui.edLugar, QtCore.SIGNAL('returnPressed()'), self.lugarCapturado)
        # self.connect(self.ui.edLugar.completer(), QtCore.SIGNAL('activated(QString)'), self.actualizaStatus)
        # self.cargaLugares()

        ## Aceptar
        icon = QtGui.QIcon()
        icon.addPixmap(QtGui.QPixmap("imagenes/Check.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.ui.boAceptar.setIcon(icon)
        self.ui.boAceptar.setIconSize(QtCore.QSize(32,32))
        self.ui.boAceptar.setDefault(True)
        self.connect(self.ui.boAceptar, QtCore.SIGNAL('clicked()'), self.guarda)

        ## Cancelar
        icon = QtGui.QIcon()
        icon.addPixmap(QtGui.QPixmap("imagenes/Cancel.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.ui.boCancelar.setIcon(icon)
        self.ui.boCancelar.setIconSize(QtCore.QSize(32,32))
        self.connect(self.ui.boCancelar, QtCore.SIGNAL('clicked()'), self.cancela)

        # datos = man.rolI(tipo=u'propio')
        # if datos:
            # print datos
            # f=g
            # self.id = datos.id
            # self.ui.edNombreComercial.setText(datos.comentarios)
            # self.ui.edRazonSocial.setText(datos.entidad.nombre)
            # self.ui.edNombre2.setText(datos.entidad.nombre2)
            # self.ui.edRFC.setText(datos.entidad.rfc)
            # if datos.direcciones:
                # self.ui.edCalle.setText(datos.direcciones[0].calle)
                # self.ui.edColonia.setText(datos.direcciones[0].areanominal)
                # self.ui.edCodigoPostal.setText(datos.direcciones[0].areapostal)
                # if datos.direcciones[0].lugar:
                    # self.ui.cbLugar.setCurrentIndex(self.ui.cbLugar.findData(QtCore.QVariant(datos.direcciones[0].lugar.id)))
                # self.ui.edLugar.setText(datos.direcciones[0].lugar)

        self.actualizaStatus()

        self.ui.edNombreComercial.setFocus()

        self.setTabOrder(self.ui.edNombreComercial, self.ui.edRazonSocial)
        self.setTabOrder(self.ui.edRazonSocial, self.ui.edNombre2)
        self.setTabOrder(self.ui.edNombre2, self.ui.edRFC)
        self.setTabOrder(self.ui.edRFC, self.ui.edCalle)
        self.setTabOrder(self.ui.edCalle, self.ui.edColonia)
        self.setTabOrder(self.ui.edColonia, self.ui.edCodigoPostal)
        self.setTabOrder(self.ui.edCodigoPostal, self.ui.cbLugar)
        self.setTabOrder(self.ui.cbLugar, self.ui.boAceptar)


    def actualizaStatus(self):      # print "propio.igu.Captura.actualizaStatus()"
        if self.esValida():
            self.ui.boAceptar.setEnabled(True)
        else:
            self.ui.boAceptar.setEnabled(False)
        self.ui.boAceptar.setToolTip(self.mensajes)


    def agrega(self):               # print "propio.vista.Captura.agrega()"
        # self.ui.titulo.setText(QtGui.QApplication.translate("Empresa Básica", "Datos de la Empresa", None, QtGui.QApplication.UnicodeUTF8))
        # self.ui.titulo.setFrameShape(QtGui.QFrame.WinPanel)
        # self.ui.titulo.setFrameShadow(QtGui.QFrame.Sunken)

        self.__modo = 'agregar'
        self.clear()

        self.actualizaStatus()

        # self.contenedor.setInnerStatus('hidden')

        self.ui.edNombreComercial.setFocus()    # Put at the end

        self.show()


    def cancela(self):              # print 'propio.Forma.cancelar()'
        self.reject()


    def cargaLugares(self):         # print "propio.igu.Captura.cargarLugares()"
        registros = man.lugares()
        self.ui.cbLugar.clear()
        for registro in registros:
            self.ui.cbLugar.addItem(registro.nombre, QtCore.QVariant(registro.id))

        print self.ui.cbLugar.count()


    def clear(self):
        self.ui.edNombreComercial.clear()
        self.ui.edRazonSocial.clear()
        self.ui.edNombre2.clear()
        self.ui.edRFC.clear()
        self.ui.edCalle.clear()
        self.ui.edColonia.clear()
        self.ui.edCodigoPostal.clear()
        self.ui.cbLugar.setEditText("")


    def datos(self):
        datos = {}
        if self.modo == 'modificar':
            datos['id'] = self.id
        datos['comentarios'] = unicode(self.ui.edNombreComercial.text())
        datos['nombre'] = unicode(self.ui.edRazonSocial.text())
        datos['nombre2'] = unicode(self.ui.edNombre2.text())
        datos['rfc'] = unicode(self.ui.edRFC.text())

        datos['personalidad'] = self.ui.edRFC.tipo()
        datos['calle'] = unicode(self.ui.edCalle.text())
        datos['areanominal'] = unicode(self.ui.edColonia.text())
        datos['areapostal'] = unicode(self.ui.edCodigoPostal.text())

        lugarId, lugarExiste = self.ui.cbLugar.itemData(self.ui.cbLugar.currentIndex()).toInt()

        if lugarExiste:
            datos['lugar_id'] = lugarId
        else:
            datos['lugar'] = unicode(self.ui.cbLugar.currentText())

        datos['telefonoFijo'] = unicode("")

        datos['tipo'] = u'propio'
        return datos


    def esValida(self):
        valida = True
        self.mensajes = u""

        if not self.ui.edNombreComercial.isValid:
            valida = False
            self.mensajes += u"El nombre comercial %s\n" % self.ui.edNombreComercial.message()

        if not self.ui.edRazonSocial.isValid:
            valida = False
            self.mensajes += u"El nombre %s\n" % self.ui.edRazonSocial.message()

        if unicode(self.ui.edNombre2.text()) == u"":
            self.ui.edRFC.setTipo(self.ui.edRFC.MORAL)
        else:
            self.ui.edRFC.setTipo(self.ui.edRFC.FISICA)

        if not self.ui.edRFC.isValid:
            valida = False
            if self.ui.edRFC.text() == u"":
                self.mensajes += u"Falta el RFC\n"
            else:
                self.mensajes += u"Error en el RFC\n%s\n" % self.ui.edRFC.message()
        else:
            roles = man.rolesI(rfc=unicode(self.ui.edRFC.text()))
            self.ui.edRFC.setExternalValidation(True, u"")
            if roles:
                rol = roles[0]
                if rol.id == self.id:
                    pass
                else:
                    self.ui.edRFC.setExternalValidation(False, u"Ya existe una persona con este RFC\n")

        if not self.ui.edCalle.isValid:
            valida = False
            self.mensajes += u"La calle %s\n" % self.ui.edCalle.message()

        if not self.ui.edColonia.isValid:
            valida = False
            self.mensajes += u"La colonia %s\n" % self.ui.edColonia.message()

        if not self.ui.edCodigoPostal.isValid:
            valida = False
            self.mensajes += u"El código postal %s\n" % self.ui.edCodigoPostal.message()

        # if not self.ui.edLugar.isValid:
            # valida = False
            # self.mensajes += u"El lugar %s\n" % self.ui.edLugar.message()

        self.mensajes = self.mensajes.rstrip(u"\n")

        return valida


    def guarda(self):               # print 'propio.Forma.guarda()'
        datos = self.datos()

        if self.modo == 'agregar':
            man.rolI(**datos)
        elif self.modo == 'modificar':
            rol = man.rolI(**datos)

        QtGui.QDialog.accept(self)



        '''
        rol = man.dameRol(tipo=u'Propio')
        if rol:
            man.actualizaRol(**datos)

            rol = man.agregaRol(**datos)

            ## Rol de empleado default
            if rol.entidad.personalidad == CDRfcEdit.FISICA:
                datos['comentarios'] = u""
                datos['entidad_id'] = rol.entidad.id
                datos['tipo'] = u'Empleado'
                datos['funcion'] = u'Administrador'

                datos['entidad'] = rol.entidad
                datos['direccion'] = None
                datos['contacto'] = None
                rol = man.agregaRol(**datos)
            else:
                datos = {}
                datos['id'] = 2
                datos['comentarios'] = u""
                datos['tipo'] = u'Empleado'
                datos['funcion'] = u'Administrador'

                datos['nombre'] = u'Administrador'
                datos['nombre2'] = u'General'
                datos['rfc'] = 'XXXX 111111 XXX'
                # datos['entidad']['fechanacimiento'] = datetime.date(1900,1,1)

                datos['lugar'] = u'Los Mochis, Sin.'
                datos['areanominal'] = unicode(u'Col. Centro')
                datos['areapostal'] = unicode('81200')
                datos['calle'] = u'Domicilio conocido'

                datos['tipocontacto'] = u'Tel fijo'
                datos['valorcontacto'] = u''

                rol = man.agregaRol(**datos)

            man.actualizaAtributo(propietario=u'empleados', nombre=u'Default', valor=u"%s" % rol.id)
        '''


    def lugarChanged(self, index):
        print index
        self.actualizaStatus()


    def lugarLostFocus(self):
        self.ui.cbLugar.setCurrentIndex(self.ui.cbLugar.findText(self.ui.cbLugar.currentText(), QtCore.Qt.MatchStartsWith))


    def modifica(self, datos):
        # self.ui.titulo.setText(u"Modificación de datos de la Empresa")
        self.clear()
        self.__modo = 'modificar'

        self.id = datos.id
        self.setDatos(datos)

        self.actualizaStatus()

        # self.contenedor.setInnerStatus('hidden')

        self.ui.edNombreComercial.setFocus()    # Put at the end

        self.show()


    def setDatos(self, rol):
        self.ui.edNombreComercial.setText(rol.comentarios)
        self.ui.edRazonSocial.setText(rol.entidad.nombre)
        self.ui.edNombre2.setText(rol.entidad.nombre2)
        self.ui.edRFC.setText(rol.entidad.rfc)
        self.ui.edRFC.setTipo(rol.entidad.personalidad)

        if rol.direcciones:
            self.ui.edCalle.setText(rol.direcciones[0].calle)
            self.ui.edColonia.setText(rol.direcciones[0].areanominal)
            self.ui.edCodigoPostal.setText(rol.direcciones[0].areapostal)
            self.ui.cbLugar.setCurrentIndex(self.ui.cbLugar.findData(QtCore.QVariant(rol.direcciones[0].lugar.id)))



    # def lugarCapturado(self):
        # if self.ui.edLugar.completer().completionCount() == 1:
            # self.ui.edLugar.setText(self.ui.edLugar.completer().currentCompletion())
        # self.actualizaStatus()


    # def muestraLugares(self):
        # self.ui.edLugar.completer().setCompletionPrefix(self.ui.edLugar.text())
        # self.ui.edLugar.completer().complete()


# print (0), "  propio                end"
